package com.xiaotu.schedule;

import cn.hutool.core.date.DateUtil;
import com.xiaotu.service.sync.StarWorksService;
import com.xiaotu.service.sync.SyncDeleteRecordService;
import com.xiaotu.service.sync.SyncService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;


/**
 * @author zhangxiao
 * @create 2021-09-22 9:44
 */
@Component
@Slf4j
public class SyncSchedule {

    @Autowired
    private SyncService syncService;

    @Autowired
    private SyncDeleteRecordService syncDeleteRecordService;

    @Autowired
    private StarWorksService starWorksService;

    /**
     * 包含
     * 增量同步昨日更新：艺人基础信息 剧基础信息
     */
    @Scheduled(cron = "0 0 4 * * ?")
    public void sync() {
        log.info("<<<编剧任务1>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 开始：增量同步昨日更新：艺人基础信息 剧基础信息");
        syncService.sync();
        log.info("<<<编剧任务1>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 结束：增量同步昨日更新：艺人基础信息 剧基础信息");
    }

    /**
     * 包含
     * 全量同步：演员作品中间表
     */
    @Scheduled(cron = "0 10 4 * * ?")
    public void syncTvActors() {
        log.info("<<<编剧任务2>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 开始：全量同步：演员作品中间表");
        starWorksService.syncTvActors();
        log.info("<<<编剧任务2>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 结束：全量同步：演员作品中间表");
    }

    /**
     * 包含
     * 全量同步：导演作品中间表
     */
    @Scheduled(cron = "0 20 4 * * ?")
    public void syncDirectorWorks() {
        log.info("<<<编剧任务3>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 开始：全量同步：导演作品中间表");
        starWorksService.syncDirectorWorks();
        log.info("<<<编剧任务3>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 结束：全量同步：导演作品中间表");
    }

    /**
     * 包含
     * 全量同步：编剧作品中间表
     */
    @Scheduled(cron = "0 30 4 * * ?")
    public void syncScreenwriterWorks() {
        log.info("<<<编剧任务4>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 开始：全量同步：编剧作品中间表");
        starWorksService.syncScreenwriterWorks();
        log.info("<<<编剧任务4>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 结束：全量同步：编剧作品中间表");
    }

    /**
     * 包含
     * 全量同步：艺人获奖 作品获奖
     */
    @Scheduled(cron = "0 40 4 * * ?")
    public void syncAwars() {
        log.info("<<<编剧任务5>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 开始：全量同步：艺人获奖 作品获奖");
        syncService.syncAwars();
        log.info("<<<编剧任务5>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 结束：全量同步：艺人获奖 作品获奖");
    }

    /**
     * 包含
     * 增量同步昨日更新：作品 各平台播放量 ，热度，豆瓣，指数相关
     */
    @Scheduled(cron = "0 50 4 * * ?")
    public void syncTvProcessData() {
        log.info("<<<编剧任务6>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 开始：增量同步昨日更新：作品 各平台播放量 ，热度，豆瓣，指数相关");
        syncService.syncTvProcessData();
        log.info("<<<编剧任务6>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 结束：增量同步昨日更新：作品 各平台播放量 ，热度，豆瓣，指数相关");
    }

    /**
     * 包含
     * 全量同步：艺人删除记录 作品删除记录
     */
    @Scheduled(cron = "0 0 5 * * ?")
    public void syncDeleteRecord() {
        log.info("<<<编剧任务7>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 开始：全量同步：艺人删除记录 作品删除记录");
        syncDeleteRecordService.syncDeleteRecord();
        log.info("<<<编剧任务7>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 结束：全量同步：艺人删除记录 作品删除记录");
    }

    /**
     * 注意：此任务等待以上任务完成之后执行
     * 删除无用的艺人，剧
     */
    @Scheduled(cron = "0 0 6 * * ?")
    public void deleteNoUse() {
        log.info("<<<编剧任务8>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 开始：删除无用的艺人，剧");
        syncService.deleteNoUse();
        log.info("<<<编剧任务8>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 结束：删除无用的艺人，剧");
    }

}
